package com.ruoyi.core.service;

import com.ruoyi.out.domain.UserOvertimeLeave;

import java.math.BigDecimal;

/**
 * @author Yuan
 * @description
 * @date 2022/10/8 17:39
 */
public interface AttendanceCalculationService {

    /**
     * 1.获取某人某月法定工作日加班小时
     * @param dateStr yyyy-MM
     */
    Double getLegalWorkingDayOvertimeHour(Long userId,String dateStr);

    /**
     * 2.获取某月休息日加班小时数
     * @param dateStr yyyy-MM
     */
    Double getRestDayOvertimeHour(Long userId,String dateStr);

    /**
     * 3.某人某月法定休假日加班小时数
     * @param dateStr yyyy-MM
     */
    Double getOfficialHolidayDayOvertimeHour(Long userId,String dateStr);

    /**
     * 4.某人某年累计病假小时数
     * @param year yyyy
     */
    Double getSickLeaveHourForYear(Long userId,String year);


    /**
     * 5.某人某月累计病假小时数
     * @param dateStr yyyy-MM
     */
    Double getSickLeaveHourForMonth(Long userId,String dateStr);

    /**
     * 6.某人某年年累计事假天数
     * @param year yyyy
     */
    Double getAnnualPersonnelLeaveDay(Long userId,String year);

    /**
     * 7.获取某年事假小时数
     * @param year yyyy
     */
    Double getAnnualPersonnelLeaveHour(Long userId,String year);

    /**
     * 8.某人某月月累计事假天数
     * @param dateStr yyyy-MM
     */
    Double getPersonnelLeaveDayForMonth(Long userId,String dateStr);

    /**
     * 9.获取员工的工龄
     */
    BigDecimal getEmployeeAge(Long userId);

    /**
     * 10.获取某月事假小时数
     * @param dateStr yyyy-MM
     */
    Double getPersonnelLeaveHourForMonth(Long userId,String dateStr);

    /**
     * 11.获取用户某月哺乳假小时
     * @param dateStr yyyy-MM
     */
    Double getBreastFeedingLeaveHourForMonth(Long userId,String dateStr);

    /**
     * 12.获取用户某年哺乳假小时数
     */
    Double getBreastFeedingLeaveHourForYear(Long userId,String year);

    /**
     * 13.获取某月考勤数据
     */
    public UserOvertimeLeave getAttendanceData(Long userId,String dateStr);

    /**
     * 14.获取用户可申请的年休假时长
     */
    public BigDecimal annualLeaveDay(Long userId);

    /**
     * 15.获取每日考勤时间
     */
    public BigDecimal getAttendanceTimeEveryDay();

    /**
     * 16.哺乳假期间，基本工资发放比例
     */
    public BigDecimal getBasicSalaryRateToBreastFeeding();

    /**
     * 17.哺乳假期间，基础性绩效工资发放比例
     */
    public BigDecimal getBasicMeritSalaryRateToBreastFeeding();

    /**
     * 18.哺乳假期间，奖励性绩效发放比例
     */
    public BigDecimal getRewardPerformanceRateToBreastFeeding();

    /**
     * 19.根据给定的年月，获取该日期前的事假小时数
     * @param dateStr yyyy-MM
     */
    public Double getPersonnelLeaveHourBeforeDate(Long userId,String dateStr);
    /**
     * 20.根据给定的年月，获取该日期前的病假小时数
     * @param dateStr yyyy-MM
     */
    public Double getSickLeaveHourBeforeDate(Long userId,String dateStr);

}
